Fix state in xm list; add state to VM_metrics class.
authorEwan Mellor <ewan@xensource.com>
Fri, 23 Mar 2007 11:04:51 +0000 (11:04 +0000)
committerEwan Mellor <ewan@xensource.com>
Fri, 23 Mar 2007 11:04:51 +0000 (11:04 +0000)
Signed-off-by: Tom Wilkie <tom.wilkie@gmail.com>
tools/python/xen/xend/XendAPI.py
tools/python/xen/xend/XendVMMetrics.py
tools/python/xen/xm/main.py

index 72b93ee11231d54a60b10577b3af8e51c4e83579..4c2ba32ae03dc97858a984a19e417121186b4c84 100644 (file)
@@ -1608,6 +1608,7 @@ class XendAPI(object):
                           'VCPUs_CPU',
                           'VCPUs_flags',
                           'VCPUs_params',
+                          'state',
                           'start_time']
     VM_metrics_attr_rw = []
     VM_metrics_methods = []
@@ -1642,6 +1643,9 @@ class XendAPI(object):
     def VM_metrics_get_start_time(self, _, ref):
         return xen_api_success(self._VM_metrics_get(ref).get_start_time())
 
+    def VM_metrics_get_state(self, _, ref):
+        return xen_api_success(self._VM_metrics_get(ref).get_state())
+
 
     # Xen API: Class VBD
     # ----------------------------------------------------------------
index 217d9c2096233357f2690d92468b23fa63ba1bd0..2ba328a5cd6128436c423f080b73d5807c474b04 100644 (file)
@@ -97,6 +97,30 @@ class XendVMMetrics:
         else:
             return {}
 
+    def get_state(self):
+        try:
+            domid = self.xend_domain_instance.getDomid()
+            domlist = xc.domain_getinfo(domid, 1)
+            if domlist and domid == domlist[0]['domid']:
+                dominfo = domlist[0]
+
+                states = []
+                def addState(key):
+                    if dominfo[key] == 1:
+                        states.append(key)
+
+                addState("running")
+                addState("blocked")
+                addState("paused")
+                addState("dying")
+                addState("crashed")
+                addState("shutdown")
+                return ",".join(states)
+        except Exception, err:
+            # ignore missing domain
+            log.trace("domain_getinfo(%d) failed, ignoring: %s", domid, str(err))
+        return ""
+
     def get_VCPUs_params(self):
         domid = self.xend_domain_instance.getDomid()
         if domid is not None:
@@ -125,4 +149,5 @@ class XendVMMetrics:
                  'VCPUs_flags'       : self.get_VCPUs_flags(),
                  'VCPUs_params'      : self.get_VCPUs_params(),
                  'start_time'        : self.get_start_time(),
+                 'state'             : self.get_state(),
                }
index 7814b434389309b2f71648440474f94e79034fd8..64362fe08f5af7c5cbd330c773bf0ac318dfb7be 100644 (file)
@@ -715,10 +715,21 @@ def getDomains(domain_names, state, full = 0):
             dom_rec = server.xenapi.VM.get_record(dom_ref)
             dom_metrics_ref = server.xenapi.VM.get_metrics(dom_ref)
             dom_metrics = server.xenapi.VM_metrics.get_record(dom_metrics_ref)
+
+            states = ('running', 'blocked', 'paused', 'shutdown',
+                      'crashed', 'dying')
+            def state_on_off(state):
+                if dom_metrics['state'].find(state) > -1:
+                    return state[0]
+                else:
+                    return "-"
+            state_str = "".join([state_on_off(state)
+                                 for state in states])
+            
             dom_rec.update({'name':     dom_rec['name_label'],
                             'memory_actual': int(dom_metrics['memory_actual'])/1024,
                             'vcpus':    dom_metrics['VCPUs_number'],
-                            'state':    '-----',
+                            'state':    state_str,
                             'cpu_time': dom_metrics['VCPUs_utilisation'],
                             'start_time': dom_metrics['start_time']})